package com.irdstudio.apicenter.gateway.comm;

import org.apache.commons.lang3.StringUtils;

import com.irdstudio.apicenter.gateway.comm.format.ITDFormat;
import com.irdstudio.apicenter.gateway.core.dm.AppTradeInout;
import com.irdstudio.apicenter.gateway.util.spring.BeanUtils;

/**
 * 交易数据格式化辅助类
 * @author zs.ligm
 * @version 1.0
 * @date 2015-08-05
 */
public class MaccsFormatUtil {
	
	/* 不进行格式化 */
	public final static String TRADE_DATA_FORMAT_NO = "0";
	/* 按固定值(即常量 )进行格式化 */
	public final static String TRADE_DATA_FROMAT_CONST = "1";

	/**
	 * 交易数据格式化调用入口
	 * @param srcPacket  
	 * @param tradeDataFormat 格式化方法
	 * @param value  要格式化的值
	 * @param tradeDataFormatParam 格式化参数
	 * @return
	 */
	public static String format(final MaccsPacket srcPacket, final AppTradeInout inout) {
		String value = srcPacket.getValue(inout.getTradeElementCode());
		if(StringUtils.isEmpty(inout.getTradeDataFormat()) 
				|| TRADE_DATA_FORMAT_NO.equals(inout.getTradeDataFormat())){
			// 不需要进行格式化时,直接返回
			return value;
		} else if(TRADE_DATA_FROMAT_CONST.equals(inout.getTradeDataFormat())){
			return inout.getTradeDataFormatParam();
		} else {
			// 调用格式化类之前,先将其参数中的变量解释出来
			String formatParamValue = MaccsVarParserUtil.parseString(
					inout.getTradeDataFormatParam(), srcPacket);
			ITDFormat tdformat = (ITDFormat) BeanUtils.getBean(inout.getTradeDataFormat());
			return tdformat.format(value, formatParamValue);
		}
	}


}
